#ifndef _NET_H_
#define _NET_H_

#include "FreeRTOS.h"
#include "queue.h"
#include "task.h"

// 网络状态报告枚举
typedef enum {
    NET_STATE_DEINIT,
	NET_STATE_INITIALIZED,
	// 网络连接中
	NET_STATE_CONNECTING,
	
    NET_STATE_ATTACHED,
    NET_STATE_CONNECTED,
    NET_STATE_DISCONNECTED,
	// 网络已关闭
	NET_STATE_CLOSED
} NetState;

// 消息类型枚举
typedef enum {
	// 网络初始化成功NET_STATE_CONNECTING
	NET_MSG_INITIALIZED,
	// 网络连接中
	NET_MSG_CONNECTING,
	// 网络连接成功
	NET_MSG_CONNECTED,
	// 网络连接失败
	NET_MSG_CONNECT_FAIL,
	// 网络断开连接
	NET_MSG_DISCONNECT,
	// 网络连接超时
	NET_MSG_CONNECT_TIMEOUT,
	// 网络断开连接超时
	NET_MSG_DISCONNECT_TIMEOUT,

} NetMsgType;

/**
 * 定义网络报告的结构体
 * 
 * 该结构体包含网络状态、网络消息类型等信息，用于报告网络相关数据。
 */
typedef struct{
    NetState netState;       // 网络状态，详细说明见NetState的定义
	NetMsgType netMsgType;   // 网络消息类型，详细说明见NetMsgType的定义
	// 待添加                  // 该注释提示结构体可能还需要添加其他成员变量
} NetReport;

// 网络事件类型
typedef enum {
	// 网络初始化事件
	NET_EVENT_INIT = 0,
	// 网络开始连接
	NET_EVENT_CONNECTING,
	// 网络连接成功
	NET_EVENT_CONNECTED,
	// 网络连接超时
	NET_EVENT_CONNECT_TIMEOUT,
	// 网络断开连接
	NET_EVENT_DISCONNECT,
	// 网络关闭
	NET_EVENT_CLOSE,
} NetEventType;

// 网络事件结构体
typedef struct {
    NetEventType type;
	void *message;
} NetEvent;

// 网络模块接口
typedef struct {
    void (*Init)(void);
    void (*Deinit)(void);
    // void (*EventLoopTask)(void*);
    uint8_t (*GetReport)(NetReport *report);
    void (*Handle)(NetEvent *event);
	void (* userEventHook)(NetEvent *event, NetReport *report);
} NetModule;

// 网络模块实例化
extern NetModule net;

#endif // _NET_H_